home *** CD-ROM | disk | FTP | other *** search
- library MyHook;
- { ... }
- var
- P86Mask: Pointer;
-
- function MaskX86Exceptions: Pointer;
- var
- dwOldMask: Pointer;
- begin
- asm
- fnstcw WORD PTR dwOldMask;
- mov eax, dwOldMask;
- or eax, $3f;
- mov WORD PTR dwOldMask + 2, ax;
- fldcw WORD PTR dwOldMask + 2;
- end;
- result := dwOldMask;
- end;
-
- procedure RestoreX86Mask(dwOldMask: Pointer);
- begin
- asm
- fnclex;
- fldcw WORD PTR dwOldMask;
- end;
- end;
-
- { your hook procedure here }
-
- procedure LibEnter;
- begin
- P86Mask := MaskX86Exceptions;
- end;
-
- procedure LibExit;
- begin
- Restorex86Mask(P86Mask);
- end;
-
- procedure DLLMain(Reason:DWORD);
- begin
- case Reason of
- DLL_PROCESS_DETACH : LibExit;
- DLL_PROCESS_ATTACH : LibEnter;
- DLL_THREAD_ATTACH : ;
- DLL_THREAD_DETACH : ;
- end;
- end;
-
- begin
- DLLProc := @DLLMain;
- DLLMain(DLL_PROCESS_ATTACH);
- end.